package com.kexio.file.vo;

import java.time.LocalDateTime;

import com.fasterxml.jackson.annotation.JsonFormat;

/**
 * 存储对象 - 视图对象
 * 
 * @author Kexio Team
 * @since 1.0.0
 * @description 用于接口返回脱敏/展示友好的字段
 */
public class StorageObjectVO {
    
    /** 存储对象ID */
    private String id;
    
    /** 内容哈希值 */
    private String contentHash;
    
    /** 文件大小（字节） */
    private Long fileSize;
    
    /** 文件大小（人类可读格式） */
    private String humanReadableSize;
    
    /** 存储后端类型 */
    private String storageType;
    
    /** 存储桶/容器名称 */
    private String bucketName;
    
    /** 存储路径/对象键 */
    private String storagePath;
    
    /** 存储配置名称 */
    private String storageConfig;
    
    /** 引用计数 */
    private Integer referenceCount;
    
    /** 存储状态 */
    private Integer status;
    
    /** 存储状态文本 */
    private String statusText;
    
    /** 是否加密存储 */
    private Boolean isEncrypted;
    
    /** 加密算法 */
    private String encryptionAlgorithm;
    
    /** 压缩算法 */
    private String compressionAlgorithm;
    
    /** 原始大小（压缩前） */
    private Long originalSize;
    
    /** 压缩率 */
    private Double compressionRatio;
    
    /** 存储时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime storageTime;
    
    /** 最后验证时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastVerifyTime;
    
    /** 验证状态 */
    private Integer verifyStatus;
    
    /** 验证状态文本 */
    private String verifyStatusText;
    
    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    
    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    
    // ==================== Getter/Setter ====================
    
    public String getId() { return this.id; }
    public void setId(String id) { this.id = id; }
    
    public String getContentHash() { return this.contentHash; }
    public void setContentHash(String contentHash) { this.contentHash = contentHash; }
    
    public Long getFileSize() { return this.fileSize; }
    public void setFileSize(Long fileSize) { this.fileSize = fileSize; }
    
    public String getHumanReadableSize() { return this.humanReadableSize; }
    public void setHumanReadableSize(String humanReadableSize) { this.humanReadableSize = humanReadableSize; }
    
    public String getStorageType() { return this.storageType; }
    public void setStorageType(String storageType) { this.storageType = storageType; }
    
    public String getBucketName() { return this.bucketName; }
    public void setBucketName(String bucketName) { this.bucketName = bucketName; }
    
    public String getStoragePath() { return this.storagePath; }
    public void setStoragePath(String storagePath) { this.storagePath = storagePath; }
    
    public String getStorageConfig() { return this.storageConfig; }
    public void setStorageConfig(String storageConfig) { this.storageConfig = storageConfig; }
    
    public Integer getReferenceCount() { return this.referenceCount; }
    public void setReferenceCount(Integer referenceCount) { this.referenceCount = referenceCount; }
    
    public Integer getStatus() { return this.status; }
    public void setStatus(Integer status) { this.status = status; }
    
    public String getStatusText() { return this.statusText; }
    public void setStatusText(String statusText) { this.statusText = statusText; }
    
    public Boolean getIsEncrypted() { return this.isEncrypted; }
    public void setIsEncrypted(Boolean isEncrypted) { this.isEncrypted = isEncrypted; }
    
    public String getEncryptionAlgorithm() { return this.encryptionAlgorithm; }
    public void setEncryptionAlgorithm(String encryptionAlgorithm) { this.encryptionAlgorithm = encryptionAlgorithm; }
    
    public String getCompressionAlgorithm() { return this.compressionAlgorithm; }
    public void setCompressionAlgorithm(String compressionAlgorithm) { this.compressionAlgorithm = compressionAlgorithm; }
    
    public Long getOriginalSize() { return this.originalSize; }
    public void setOriginalSize(Long originalSize) { this.originalSize = originalSize; }
    
    public Double getCompressionRatio() { return this.compressionRatio; }
    public void setCompressionRatio(Double compressionRatio) { this.compressionRatio = compressionRatio; }
    
    public LocalDateTime getStorageTime() { return this.storageTime; }
    public void setStorageTime(LocalDateTime storageTime) { this.storageTime = storageTime; }
    
    public LocalDateTime getLastVerifyTime() { return this.lastVerifyTime; }
    public void setLastVerifyTime(LocalDateTime lastVerifyTime) { this.lastVerifyTime = lastVerifyTime; }
    
    public Integer getVerifyStatus() { return this.verifyStatus; }
    public void setVerifyStatus(Integer verifyStatus) { this.verifyStatus = verifyStatus; }
    
    public String getVerifyStatusText() { return this.verifyStatusText; }
    public void setVerifyStatusText(String verifyStatusText) { this.verifyStatusText = verifyStatusText; }
    
    public LocalDateTime getCreateTime() { return this.createTime; }
    public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; }
    
    public LocalDateTime getUpdateTime() { return this.updateTime; }
    public void setUpdateTime(LocalDateTime updateTime) { this.updateTime = updateTime; }
}
